home *** CD-ROM | disk | FTP | other *** search
- #include <dos/dos.h>
- #include <dos/datetime.h>
- #include <libraries/gadtools.h>
-
- #include <clib/alib_protos.h>
-
- #include <proto/exec.h>
- #include <proto/intuition.h>
- #include <proto/dos.h>
- #include <proto/utility.h>
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- #include <classact.h>
- #include <classact_macros.h>
-
- #ifdef _DCC
- #define SAVEDS __geta4
- #define ASM
- #define REG_A0 __A0
- #define REG_A1 __A1
- #else
- #define SAVEDS __saveds
- #define ASM __asm
- #define REG_A0 register __a0
- #define REG_A1 register __a1
- #endif
-
- #ifdef _DCC
- extern __stkargs ULONG HookEntry();
- #else
- extern __stdargs ULONG HookEntry();
- #endif
-
- /* Gadget IDs.
- */
- #define GAD_QUIT 1
-
- /* ARexx command IDs.
- */
- enum { REXX_NAME, REXX_VERSION, REXX_AUTHOR, REXX_SEND, REXX_DATE };
-
-
- /* Protos for the reply hook and ARexx command functions.
- */
- VOID SAVEDS reply_callback(struct Hook *, Object *, struct RexxMsg *);
- VOID ASM rexx_Name(REG_A0 struct ARexxCmd *, REG_A1 struct RexxMsg *);
- VOID ASM rexx_Version(REG_A0 struct ARexxCmd *, REG_A1 struct RexxMsg *);
- VOID ASM rexx_Author(REG_A0 struct ARexxCmd *, REG_A1 struct RexxMsg *);
- VOID ASM rexx_Send(REG_A0 struct ARexxCmd *, REG_A1 struct RexxMsg *);
- VOID ASM rexx_Date(REG_A0 struct ARexxCmd *, REG_A1 struct RexxMsg *);
-
- /* Buffer for the system date.
- */
- UBYTE systemDate[32];
-
- /* Our reply hook function.
- */
- struct Hook reply_hook;
-
- /* The following commands are valid for this demo.
- */
- struct ARexxCmd Commands[] =
- {
- { "NAME", REXX_NAME, rexx_Name, NULL, NULL, },
- { "VERSION", REXX_VERSION, rexx_Version, NULL, NULL, },
- { "AUTHOR", REXX_AUTHOR, rexx_Author, NULL, NULL, },
- { "SEND", REXX_SEND, rexx_Send, "TEXT/F", NULL, },
- { "DATE", REXX_DATE, rexx_Date, "SYSTEM/S", NULL, },
- { NULL, NULL, NULL, NULL, NULL, }
- };
-
-
- /* Starting point.
- */
- int main(int argc, char *argv[])
- {
- Object *arexx_obj;
-
- if (!ButtonBase) return(20);
-
- /* Create host object.
- */
- if (arexx_obj = ARexxObject,
- AREXX_HostName, "AREXXDEMO",
- AREXX_Commands, Commands,
- AREXX_NoSlot, TRUE,
- AREXX_ReplyHook, &reply_hook,
- End)
- {
- Object *win_obj;
-
- /* Create the window object.
- */
- if (win_obj = WindowObject,
- WA_Title, "ClassAct arexx.class Demo",
- WA_DragBar, TRUE,
- WA_CloseGadget, TRUE,
- WA_DepthGadget, TRUE,
- WINDOW_ParentGroup, LayoutObject,
- LAYOUT_AddChild, ButtonObject,
- GA_Text, "_Quit",
- GA_ID, GAD_QUIT,
- GA_RelVerify, TRUE,
- ButtonEnd,
- LayoutEnd,
- EndWindow)
- {
- struct Window *window;
-
- /* try to open the window.
- */
- if (window = (struct Window *)CA_OpenWindow(win_obj))
- {
- ULONG wnsig = 0, rxsig = 0, signal, result, Code;
- BOOL running = TRUE;
-
- /* Setup the reply callback hook.
- */
- reply_hook.h_Entry = HookEntry;
- reply_hook.h_SubEntry = reply_callback;
- reply_hook.h_Data = NULL;
-
- /* Try to start the macro "Demo.rexx". Note that the
- * current directory and REXX: will be searched for this
- * macro. Our reply hook will get the results of our
- * efforts to start this macro. To be totally robust, we
- * should have also passed pointers for the various result
- * variables.
- */
- DoMethod(arexx_obj, AM_EXECUTE, "Demo.rexx", NULL, NULL, NULL, NULL, NULL);
-
- /* Obtain wait masks.
- */
- GetAttr(WINDOW_SigMask, win_obj, &wnsig);
- GetAttr(AREXX_SigMask, arexx_obj, &rxsig);
-
- /* Event loop...
- */
- do
- {
- signal = Wait(wnsig | rxsig | SIGBREAKF_CTRL_C);
-
- /* ARexx event?
- */
- if (signal & rxsig)
- CA_HandleRexx(arexx_obj);
-
- /* Window event?
- */
- if (signal & wnsig)
- {
- while ((result = CA_HandleInput(win_obj, &Code)) != WMHI_LASTMSG)
- {
- switch (result & WMHI_CLASSMASK)
- {
- case WMHI_CLOSEWINDOW:
- running = FALSE;
- break;
-
- case WMHI_GADGETUP:
- switch(result & WMHI_GADGETMASK)
- {
- case GAD_QUIT:
- running = FALSE;
- break;
- }
- break;
-
- default:
- break;
- }
- }
- }
-
- if (signal & SIGBREAKF_CTRL_C)
- {
- running = FALSE;
- }
- }
- while (running);
- }
- else
- puts ("Could not open the window");
- DisposeObject(win_obj);
- }
- else
- puts("Could not create the window object");
- DisposeObject(arexx_obj);
- }
- else
- puts("Could not create the ARexx host.");
-
- return(0);
- }
-
- #ifdef _DCC
- int wbmain(struct WBStartup *wbs)
- {
- return(main(0, NULL));
- }
- #endif
-
-
- /* Note the use of SAVEDS, it is required for the callback
- * ARexx command functions if access the global data such as
- * systemData[] made in the callback.
- */
-
- /* This function gets called whenever we get an ARexx reply. In this example,
- * we will see a reply come back from the REXX server when it has finished
- * attempting to start the Demo.rexx macro.
- */
- VOID SAVEDS reply_callback(struct Hook *hook, Object *o, struct RexxMsg *rxm)
- {
- Printf("Args[0]: %s\nResult1: %ld Result2: %ld\n",
- rxm->rm_Args[0], rxm->rm_Result1, rxm->rm_Result2);
- }
-
- /* NAME
- */
- VOID SAVEDS ASM rexx_Name(REG_A0 struct ARexxCmd *ac, REG_A1 struct RexxMsg *rxm)
- {
- /* return the program name.
- */
- ac->ac_Result = "ARexxTest";
- }
-
- /* VERSION
- */
- VOID SAVEDS ASM rexx_Version(REG_A0 struct ARexxCmd *ac, REG_A1 struct RexxMsg *rxm)
- {
- /* return the program version.
- */
- ac->ac_Result = "1.0";
- }
-
- /* AUTHOR
- */
- VOID SAVEDS ASM rexx_Author(REG_A0 struct ARexxCmd *ac, REG_A1 struct RexxMsg *rxm)
- {
- /* return the authors name.
- */
- ac->ac_Result = "Phantom Development LLC";
- }
-
- /* SEND
- */
- VOID SAVEDS ASM rexx_Send(REG_A0 struct ARexxCmd *ac, REG_A1 struct RexxMsg *rxm)
- {
- /* Print some text
- */
- if (ac->ac_ArgList[0])
- Printf("%s\n", (STRPTR)ac->ac_ArgList[0]);
- }
-
- /* DATE
- */
- VOID SAVEDS ASM rexx_Date(REG_A0 struct ARexxCmd *ac, REG_A1 struct RexxMsg *rxm)
- {
- struct DateTime dt;
-
- /* SYSTEM switch specified?
- */
- if (!ac->ac_ArgList[0])
- {
- /* return the compilation date.
- */
- ac->ac_Result = "11-10-95";
- }
- else
- {
- /* compute system date and store in systemDate buffer
- */
- DateStamp((struct DateStamp *)&dt);
-
- dt.dat_Format = FORMAT_USA;
- dt.dat_Flags = 0;
- dt.dat_StrDay = NULL;
- dt.dat_StrDate = systemDate;
- dt.dat_StrTime = NULL;
-
- DateToStr(&dt);
-
- /* return system date
- */
- ac->ac_Result = systemDate;
- }
- }
-
-